﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//class A
//{
//public:
//	void test(float a)
//	{
//		cout << a;
//	}
//};
//
//class B :public A
//{
//public:
//	void test(int b)
//	{
//		cout << b;
//	}
//};
//
//void main()
//{
//	A* a = new A;
//	B* b = new B;
//	a = b;
//	a->test(1.1);
//} //结果是1
//class A{
//public:
//	A()
//		:m_iVal(0)
//	{
//		test();
//	}
//
//	virtual void func()
//	{
//		std::cout << m_iVal << " ";
//	}
//
//	void test()
//	{
//		func();
//	}
//
//public:
//	int m_iVal;
//};
//
//class B : public A
//{
//public:
//	B()
//	{
//		test();
//	}
//	virtual void func()
//	{
//		++m_iVal;
//		std::cout << m_iVal << " ";
//	}
//};
//
//int main()
//{
//	A* p = new B;
//	p->test();
//
//	return 0;
//}
////
////分析:new B时先调用父类A的构造函数，执行test()函数，在调用func()函数，由于此时还处于对象构造阶段，多态机制还没有生效，
////所以，此时执行的func函数为父类的func函数，打印0，构造完父类后执行子类构造函数，又调用test函数，然后又执行func(), 
////由于父类已经构造完毕，虚表已经生成，func满足多态的条件，所以调用子类的func函数，对成员m_iVal加1，进行打印，所以打印1， 
////最终通过父类指针p->test(), 也是执行子类的func, 所以会增加m_iVal的值，最终打印2， 所以答案为C 0 1 2


/*class A

{

public:

	void f() { cout << "A::f()" << endl; }

	int a;

};



class B : public A

{

public:

	void f(int a) { cout << "B::f()" << endl; }

	int a;

};



int main()

{

	B b;

	b.f();

	return 0;

}*/

class A

{

public:

	A() { cout << "A::A()" << endl; }

	~A() { cout << "A::~A()" << endl; }

	int a;

};



class B : public A

{

public:

	B() { cout << "B::B()" << endl; }

	~B() { cout << "B::~B()" << endl; }

	int b;

};



int main()

{

	B b;

	return 0;
}